{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# PyTorch Deep Explainer MNIST example\n", "\n", "A simple example showing how to explain an MNIST CNN trained using PyTorch with Deep Explainer." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import torch\n", "from torch import nn, optim\n", "from torch.nn import functional as F\n", "from torchvision import datasets, transforms\n", "\n", "import shap" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train Epoch: 1 [0/60000 (0%)]\tLoss: 2.311112\n", "Train Epoch: 1 [12800/60000 (21%)]\tLoss: 2.219999\n", "Train Epoch: 1 [25600/60000 (43%)]\tLoss: 1.546236\n", "Train Epoch: 1 [38400/60000 (64%)]\tLoss: 0.834946\n", "Train Epoch: 1 [51200/60000 (85%)]\tLoss: 0.731919\n", "\n", "Test set: Average loss: 0.0046, Accuracy: 9006/10000 (90%)\n", "\n", "Train Epoch: 2 [0/60000 (0%)]\tLoss: 0.725186\n", "Train Epoch: 2 [12800/60000 (21%)]\tLoss: 0.456231\n", "Train Epoch: 2 [25600/60000 (43%)]\tLoss: 0.522802\n", "Train Epoch: 2 [38400/60000 (64%)]\tLoss: 0.553828\n", "Train Epoch: 2 [51200/60000 (85%)]\tLoss: 0.332361\n", "\n", "Test set: Average loss: 0.0026, Accuracy: 9377/10000 (94%)\n", "\n" ] } ], "source": [ "batch_size = 128\n", "num_epochs = 2\n", "device = torch.device(\"cpu\")\n", "\n", "\n", "class Net(nn.Module):\n", " def __init__(self):\n", " super().__init__()\n", "\n", " self.conv_layers = nn.Sequential(\n", " nn.Conv2d(1, 10, kernel_size=5),\n", " nn.MaxPool2d(2),\n", " nn.ReLU(),\n", " nn.Conv2d(10, 20, kernel_size=5),\n", " nn.Dropout(),\n", " nn.MaxPool2d(2),\n", " nn.ReLU(),\n", " )\n", " self.fc_layers = nn.Sequential(\n", " nn.Linear(320, 50),\n", " nn.ReLU(),\n", " nn.Dropout(),\n", " nn.Linear(50, 10),\n", " nn.Softmax(dim=1),\n", " )\n", "\n", " def forward(self, x):\n", " x = self.conv_layers(x)\n", " x = x.view(-1, 320)\n", " x = self.fc_layers(x)\n", " return x\n", "\n", "\n", "def train(model, device, train_loader, optimizer, epoch):\n", " model.train()\n", " for batch_idx, (data, target) in enumerate(train_loader):\n", " data, target = data.to(device), target.to(device)\n", " optimizer.zero_grad()\n", " output = model(data)\n", " loss = F.nll_loss(output.log(), target)\n", " loss.backward()\n", " optimizer.step()\n", " if batch_idx % 100 == 0:\n", " print(\n", " f\"Train Epoch: {epoch} [{batch_idx * len(data)}/{len(train_loader.dataset)}\"\n", " f\" ({100.0 * batch_idx / len(train_loader):.0f}%)]\"\n", " f\"\\tLoss: {loss.item():.6f}\"\n", " )\n", "\n", "\n", "def test(model, device, test_loader):\n", " model.eval()\n", " test_loss = 0\n", " correct = 0\n", " with torch.no_grad():\n", " for data, target in test_loader:\n", " data, target = data.to(device), target.to(device)\n", " output = model(data)\n", " test_loss += F.nll_loss(output.log(), target).item() # sum up batch loss\n", " pred = output.max(1, keepdim=True)[1] # get the index of the max log-probability\n", " correct += pred.eq(target.view_as(pred)).sum().item()\n", "\n", " test_loss /= len(test_loader.dataset)\n", " print(\n", " f\"\\nTest set: Average loss: {test_loss:.4f},\"\n", " f\" Accuracy: {correct}/{len(test_loader.dataset)}\"\n", " f\" ({100.0 * correct / len(test_loader.dataset):.0f}%)\\n\"\n", " )\n", "\n", "\n", "train_loader = torch.utils.data.DataLoader(\n", " datasets.MNIST(\n", " \"mnist_data\",\n", " train=True,\n", " download=True,\n", " transform=transforms.Compose([transforms.ToTensor()]),\n", " ),\n", " batch_size=batch_size,\n", " shuffle=True,\n", ")\n", "\n", "test_loader = torch.utils.data.DataLoader(\n", " datasets.MNIST(\"mnist_data\", train=False, transform=transforms.Compose([transforms.ToTensor()])),\n", " batch_size=batch_size,\n", " shuffle=True,\n", ")\n", "\n", "model = Net().to(device)\n", "optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)\n", "\n", "for epoch in range(1, num_epochs + 1):\n", " train(model, device, train_loader, optimizer, epoch)\n", " test(model, device, test_loader)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2024-05-16 23:59:57.692986: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", "To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n", "2024-05-16 23:59:58.335002: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n" ] } ], "source": [ "# since shuffle=True, this is a random sample of test data\n", "batch = next(iter(test_loader))\n", "images, _ = batch\n", "\n", "background = images[:100]\n", "test_images = images[100:103]\n", "\n", "e = shap.DeepExplainer(model, background)\n", "shap_values = e.shap_values(test_images)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "shap_numpy = list(np.transpose(shap_values, (4, 0, 2, 3, 1)))\n", "test_numpy = np.swapaxes(np.swapaxes(test_images.numpy(), 1, -1), 1, 2)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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2/WZ3bt3y+7du+Wss86SrVu3yotf/GK54oor5Ljjjuvr9wLG1aDc0/fff7+8/OUvl7e+9a3ywQ9+sK/fBRh3g3I/AyjO9u3bJYoi2bt3r/Vz3724e/du7/5P/X/v3r1WW3rv3r3yvOc9bx3PHoBWxP0MYHMUeT8/1Qnx0EMPyc0338xoCGADFHlPT01Nyemnny6nn366/NzP/ZycccYZcvXVV8v73//+9f0l1sGmj4jYsWOHnHXWWd7/KpWKnH/++XLo0CH59re/nX725ptvliRJ5Lzzzlv12Oeee66Uy2X52te+lv7sBz/4gTz88MNy/vnn555TkiQiItJsNtfptwTGxyDc0/fdd5+89KUvlTe/+c3yJ3/yJ8X9ssCIG4T7GUCxKpWKnHvuuda9mCSJfO1rX8u9F88//3xrfxGRr3zlK+n+T3/602X37t3WPkeOHJE77riD+xsoUBH3M4DNUdT9/FQnxAMPPCBf/epXZdu2bcX8AgAsG1lHJ0kyuO+0N3u27LW46KKLzPOf/3xzxx13mH/4h38wZ5xxhrnkkkvS7Y8++qh5xjOeYe644470Z29729vMSSedZG6++WbzrW99y5x//vnm/PPPT7ffdNNN5q/+6q/Mvffeax588EHzpS99yZx99tnmhS984Yb+bsA4KuKevvfee82OHTvMZZddZvbs2ZP+t2/fvg393YBxU8T9bIwxDzzwgLn77rvNb//2b5szzzzT3H333ebuu+82zWZzw343YNRdf/31plqtmmuvvdbcf//95q1vfauZn583jz/+uDHGmDe96U3mfe97X7r/N77xDVMqlcx//I//0fzTP/2TufLKK025XDb33ntvus+///f/3szPz5svfOEL5rvf/a557Wtfa57+9Keber2+4b8fME6KuJ8PHDhg7r77bnPTTTcZETHXX3+9ufvuu82ePXs2/PcDxsl638+tVsu85jWvMSeeeKK55557rOdl2tZA8db7nl5aWjLvf//7ze23325+8pOfmG9961vmLW95i6lWq+Z73/vepvyORzNUHREHDhwwl1xyiZmenjazs7PmLW95i1lcXEy3P/jgg0ZEzNe//vX0Z/V63bz97W83W7ZsMZOTk+Z1r3ud1WC6+eabzfnnn2/m5uZMrVYzZ5xxhnnve99rDh48uIG/GTCeirinr7zySiMiXf+dfPLJG/ib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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# plot the feature attributions\n", "shap.image_plot(shap_numpy, -test_numpy)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The plot above shows the explanations for each class on four predictions. Note that the explanations are ordered for the classes 0-9 going left to right along the rows." ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.12" } }, "nbformat": 4, "nbformat_minor": 2 }